package com.ctgu.computer.exception;

import com.ctgu.computer.domain.result.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;

import java.util.HashSet;
import java.util.Set;

@Slf4j
@ControllerAdvice
public class GlobalExceptionHandler {

//    // 全局异常处理器
//    @ExceptionHandler
//    public Result exceptionHandler(Exception e){
////        log.info("全局异常捕获:{}",e.getMessage());
////        e.printStackTrace();
////        if(e instanceof BaseException){
////            return Result.error(e.getMessage());
////        }
//        return Result.error("系统内部异常,请连续管理员!");
//    }
// 记录已经处理过的异常类名
private final Set<String> handledExceptions = new HashSet<>();

    // 全局异常处理器
    @ExceptionHandler
    public Result exceptionHandler(Exception e) {
        String exceptionClassName = e.getClass().getName();
        if (handledExceptions.contains(exceptionClassName)) {
            // 如果异常已经被处理过，则不再处理，直接返回空结果
            return null;
        }

        // 将异常类名添加到已处理异常集合中
        handledExceptions.add(exceptionClassName);

        // 处理异常并返回结果
        log.info("全局异常捕获: {}", e.getMessage());
        e.printStackTrace();
        if (e instanceof BaseException) {
            return Result.error(e.getMessage());
        }
        return Result.error("系统内部异常，请联系管理员！");
    }
}
